#include "OpenGL.h"

GLWindow* GLWindow::This = NULL;

void GLWindow::OnDraw (void) // procedura desenare  
{
	This->onDraw();
	glutSwapBuffers();
}

GLWindow::GLWindow(integer x, integer y)
{
	int argc = 1;
	char** argv = new char * [1];
	argv[0] = "exe";
	glutInit (&argc, argv); // initializare GLUT
	This = this;
	w = x;
	h = y;
}

GLWindow::GLWindow()
{
	int argc = 1;
	char** argv = new char * [1];
	argv[0] = "exe";
	glutInit (&argc, argv); // initializare GLUT
	This = this;
	w = 500;
	h = 500;
}

var GLWindow::draw()
{
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA );
	glutInitWindowPosition (100, 100); // pozitia initiala a ferestrei de vizualizare (in coordonate ecran)
	glutInitWindowSize (w, h); // dimensiunile ferestrei 
	glutCreateWindow ("GLWindow"); // creeaza fereastra, indicand numele ferestrei de vizualizare - apare in partea superioara
	
	glShadeModel(GL_SMOOTH );
	glClearColor (0.0, 0.0, 0.0, 0.0); 
    glMatrixMode (GL_PROJECTION);  
	gluOrtho2D (0.0, w, 0.0, h);

	glClear (GL_COLOR_BUFFER_BIT); // reprezentare si colorare fereastra de vizualizare

	glEnable(GL_BLEND);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	glEnable(GL_LINE_SMOOTH);

	glutDisplayFunc (GLWindow::OnDraw); // procedura desen este invocata ori de cate ori este nevoie	
	glutIdleFunc	( GLWindow::OnDraw );
	glutMainLoop ( ); // ultima instructiune a programului, asteapta (eventuale) noi date de intrare
	return true;
}
